From 8abddb00d75802c9b64882256a1d77623844139c Mon Sep 17 00:00:00 2001
From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date: Tue, 7 Mar 2023 13:32:44 -0700
Subject: [PATCH] don't create fictious course and speed values. (#1031)
We compute coures and speed in track_recompute, which is used
by the kml and gtrnctr writers. We also compute these in the track
filter with the course speed options.
Both of these algorithums compute the course and speed for a point
based on the time and position of that point and a previous point.
Given that no information from the future is used, the course and
speed of the first point cannot be determined. This PR introduces
a change so a fictious value for the first point is not generated.
---
reference/LineStyles.kml | 12 ----
reference/earth-expertgps-track.kml | 1 -
reference/earth-expertgps.kml | 1 -
reference/realtime.kml | 7 +-
reference/track/bounds-test-track.kml | 3 -
.../track/gpx_garmin_extensions-kml_track.kml | 1 -
reference/track/segmented_tracks-track.kml | 3 -
reference/track/segmented_tracks.kml | 2 -
reference/track/trackfilter_merge~gpx.gpx | 1 -
reference/track/trackfilter_trk2seg~gpx.gpx | 2 -
reference/track/tracks~gpx.kml | 1 -
reference/track/utm_subsecond_track~csv.csv | 2 +-
route.cc | 67 +++++++++----------
trackfilter.cc | 6 +-
14 files changed, 37 insertions(+), 72 deletions(-)
diff --git a/reference/LineStyles.kml b/reference/LineStyles.kml
index 6b1053929..7ba1f585d 100644
--- a/reference/LineStyles.kml
+++ b/reference/LineStyles.kml
@@ -211,7 +211,6 @@
Longitude: -122.292646
Latitude: 37.524989
-Heading: 312.3
]]>
@@ -1752,7 +1751,6 @@
Longitude: -122.292093
Latitude: 37.520199
-Heading: 312.3
]]>
@@ -3230,7 +3228,6 @@
Longitude: -122.291970
Latitude: 37.515653
-Heading: 312.2
]]>
@@ -4792,7 +4789,6 @@
Longitude: -122.291356
Latitude: 37.510277
-Heading: 312.2
]]>
@@ -6270,7 +6266,6 @@
Longitude: -122.292584
Latitude: 37.528654
-Heading: 312.3
]]>
@@ -7727,7 +7722,6 @@
Longitude: -122.292277
Latitude: 37.530854
-Heading: 312.3
]]>
@@ -9394,7 +9388,6 @@
Longitude: -122.292032
Latitude: 37.533444
-Heading: 312.3
]]>
@@ -11166,7 +11159,6 @@
Longitude: -122.291663
Latitude: 37.535986
-Heading: 312.3
]]>
@@ -12938,7 +12930,6 @@
Longitude: -122.291541
Latitude: 37.538136
-Heading: 312.3
]]>
@@ -14584,7 +14575,6 @@
Longitude: -122.291847
Latitude: 37.517951
-Heading: 312.2
]]>
@@ -16188,7 +16178,6 @@
Longitude: -122.291111
Latitude: 37.513161
-Heading: 312.2
]]>
@@ -17792,7 +17781,6 @@
Longitude: -122.261028
Latitude: 37.507931
-Heading: 312.2
]]>
diff --git a/reference/earth-expertgps-track.kml b/reference/earth-expertgps-track.kml
index 1cdd39178..d19e9993b 100644
--- a/reference/earth-expertgps-track.kml
+++ b/reference/earth-expertgps-track.kml
@@ -1197,7 +1197,6 @@
Longitude: -91.610350
Latitude: 30.062183
Altitude: 3.281 ft
-Heading: 300.1
Time: 2002-05-25T17:06:21Z
]]>
diff --git a/reference/earth-expertgps.kml b/reference/earth-expertgps.kml
index cd6ef6b1d..7ae34cba3 100644
--- a/reference/earth-expertgps.kml
+++ b/reference/earth-expertgps.kml
@@ -1029,7 +1029,6 @@
Longitude: -91.610350
Latitude: 30.062183
Altitude: 3.281 ft
-Heading: 300.1
Time: 2002-05-25T17:06:21Z
]]>
diff --git a/reference/realtime.kml b/reference/realtime.kml
index 94828e2cf..1eb65120f 100644
--- a/reference/realtime.kml
+++ b/reference/realtime.kml
@@ -324,7 +324,6 @@
Cadence: 245
Heart rate: 25
Power: 88.9
-Heading: 317.9
]]>
@@ -464,7 +463,7 @@
Temperature: 19.8
Depth: 818.2 ft
Speed: 65.4 mph
-Heading: 25.6
+Heading: 34.9
Time: 1970-01-01T00:00:09.290Z
]]>
@@ -704,7 +703,7 @@
Temperature: 23.9
Depth: 2233.7 ft
Speed: 125.4 mph
-Heading: 50.7
+Heading: 52.9
Time: 1970-01-01T00:00:24.084Z
]]>
@@ -790,7 +789,7 @@
Cadence: 40
Depth: 2066.8 ft
Speed: 160.6 mph
-Heading: 38.0
+Heading: 45.1
Time: 1970-01-01T00:00:31.102Z
]]>
diff --git a/reference/track/bounds-test-track.kml b/reference/track/bounds-test-track.kml
index 1223fbca9..e9d290b7e 100644
--- a/reference/track/bounds-test-track.kml
+++ b/reference/track/bounds-test-track.kml
@@ -183,7 +183,6 @@
Longitude: -117.422570
Latitude: 36.339560
Altitude: 1572.507 ft
-Heading: 309.7
]]>
@@ -1528,7 +1527,6 @@
Longitude: -117.072030
Latitude: 36.236600
Altitude: 7455.052 ft
-Heading: 309.5
]]>
@@ -2320,7 +2318,6 @@
Longitude: -116.879080
Latitude: 36.463670
-Heading: 309.6
]]>
diff --git a/reference/track/gpx_garmin_extensions-kml_track.kml b/reference/track/gpx_garmin_extensions-kml_track.kml
index 883ba1061..81236455d 100644
--- a/reference/track/gpx_garmin_extensions-kml_track.kml
+++ b/reference/track/gpx_garmin_extensions-kml_track.kml
@@ -216,7 +216,6 @@
Altitude: 0.449 ft
Cadence: 151
Heart rate: 111
-Heading: 360.0
Time: 2008-08-20T07:04:48Z
]]>
diff --git a/reference/track/segmented_tracks-track.kml b/reference/track/segmented_tracks-track.kml
index 1e5a27452..13b35c7ae 100644
--- a/reference/track/segmented_tracks-track.kml
+++ b/reference/track/segmented_tracks-track.kml
@@ -132,7 +132,6 @@
Longitude: -86.844140
Latitude: 35.826146
-Heading: 305.9
]]>
@@ -713,7 +712,6 @@
Longitude: -86.844140
Latitude: 35.826146
-Heading: 305.9
]]>
@@ -1248,7 +1246,6 @@
Longitude: -86.844140
Latitude: 35.836146
-Heading: 305.9
Time: 2007-07-27T05:24:05Z
]]>
diff --git a/reference/track/segmented_tracks.kml b/reference/track/segmented_tracks.kml
index e9bf89acd..b61e664f4 100644
--- a/reference/track/segmented_tracks.kml
+++ b/reference/track/segmented_tracks.kml
@@ -97,7 +97,6 @@
Longitude: -86.844140
Latitude: 35.826146
-Heading: 305.9
]]>
@@ -632,7 +631,6 @@
Longitude: -86.844140
Latitude: 35.836146
-Heading: 305.9
Time: 2007-07-27T05:24:05Z
]]>
diff --git a/reference/track/trackfilter_merge~gpx.gpx b/reference/track/trackfilter_merge~gpx.gpx
index ef60c3c13..d19ba712a 100644
--- a/reference/track/trackfilter_merge~gpx.gpx
+++ b/reference/track/trackfilter_merge~gpx.gpx
@@ -6,7 +6,6 @@
2010-01-01T00:00:00Z
- 0.000000
2010-01-01T00:00:00.200Z
diff --git a/reference/track/trackfilter_trk2seg~gpx.gpx b/reference/track/trackfilter_trk2seg~gpx.gpx
index 107805b54..97af4c44f 100644
--- a/reference/track/trackfilter_trk2seg~gpx.gpx
+++ b/reference/track/trackfilter_trk2seg~gpx.gpx
@@ -6,7 +6,6 @@
2010-01-01T00:00:00Z
- 0.000000
2010-01-01T00:00:00.200Z
@@ -28,7 +27,6 @@
2010-01-01T00:00:01Z
- 0.000000
2010-01-01T00:00:01.200Z
diff --git a/reference/track/tracks~gpx.kml b/reference/track/tracks~gpx.kml
index e620d0d2f..b70900094 100644
--- a/reference/track/tracks~gpx.kml
+++ b/reference/track/tracks~gpx.kml
@@ -806,7 +806,6 @@
Longitude: -91.610350
Latitude: 30.062183
Altitude: 1.000 meters
-Heading: 300.1
Time: 2002-05-25T17:06:21.250Z
]]>
diff --git a/reference/track/utm_subsecond_track~csv.csv b/reference/track/utm_subsecond_track~csv.csv
index 23474f02f..a7cc10ca6 100644
--- a/reference/track/utm_subsecond_track~csv.csv
+++ b/reference/track/utm_subsecond_track~csv.csv
@@ -1,5 +1,5 @@
No,Latitude,Longitude,Speed,Date,Time
-1,0.000000,2.999551,0.00,2010/01/01,00:00:00
+1,0.000000,2.999551,,2010/01/01,00:00:00
2,0.000000,2.999641,50.02,2010/01/01,00:00:00.200
3,0.000000,2.999730,50.02,2010/01/01,00:00:00.400
4,0.000000,2.999820,50.02,2010/01/01,00:00:00.600
diff --git a/route.cc b/route.cc
index f7cd571d2..95e6940aa 100644
--- a/route.cc
+++ b/route.cc
@@ -235,13 +235,11 @@ track_swap(RouteList& other)
* Run over all the trackpoints, computing heading (course), speed, and
* and so on.
*
- * If trkdatap is non-null upon entry, a pointer to an allocated collection
- * (hopefully interesting) statistics about the track will be placed there.
+ * return a collection of (hopefully interesting) statistics about the track.
*/
computed_trkdata track_recompute(const route_head* trk)
{
- Waypoint first;
- const Waypoint* prev = &first;
+ const Waypoint* prev = nullptr;
int tkpt = 0;
int pts_hrt = 0;
double tot_hrt = 0.0;
@@ -251,44 +249,41 @@ computed_trkdata track_recompute(const route_head* trk)
double tot_pwr = 0.0;
computed_trkdata tdata;
-// first.latitude = 0;
-// first.longitude = 0;
-// first.creation_time = 0;
-
foreach (Waypoint* thisw, trk->waypoint_list) {
- /*
- * gcdist and heading want radians, not degrees.
- */
- double tlat = RAD(thisw->latitude);
- double tlon = RAD(thisw->longitude);
- double plat = RAD(prev->latitude);
- double plon = RAD(prev->longitude);
- thisw->set_course(heading_true_degrees(plat, plon, tlat, tlon));
- double dist = radtometers(gcdist(plat, plon, tlat, tlon));
-
- /*
- * Avoid that 6300 mile jump as we move from 0,0.
- */
- if (plat && plon) {
+ if (prev != nullptr) {
+ /*
+ * gcdist and heading want radians, not degrees.
+ */
+ double tlat = RAD(thisw->latitude);
+ double tlon = RAD(thisw->longitude);
+ double plat = RAD(prev->latitude);
+ double plon = RAD(prev->longitude);
+ if (!thisw->course_has_value()) {
+ // Only recompute course if the waypoint
+ // didn't already have a course.
+ thisw->set_course(heading_true_degrees(plat, plon, tlat, tlon));
+ }
+ double dist = radtometers(gcdist(plat, plon, tlat, tlon));
tdata.distance_meters += dist;
- }
- /*
- * If we've moved as much as a meter,
- * conditionally recompute speeds.
- */
- if (!thisw->speed_has_value() && (dist > 1)) {
- // Only recompute speed if the waypoint
- // didn't already have a speed
- if (thisw->GetCreationTime().isValid() &&
- prev->GetCreationTime().isValid() &&
- thisw->GetCreationTime() > prev->GetCreationTime()) {
- double timed =
- prev->GetCreationTime().msecsTo(thisw->GetCreationTime()) / 1000.0;
- thisw->set_speed(dist / timed);
+ /*
+ * If we've moved as much as a meter,
+ * conditionally recompute speeds.
+ */
+ if (!thisw->speed_has_value() && (dist > 1)) {
+ // Only recompute speed if the waypoint
+ // didn't already have a speed
+ if (thisw->GetCreationTime().isValid() &&
+ prev->GetCreationTime().isValid() &&
+ thisw->GetCreationTime() > prev->GetCreationTime()) {
+ double timed =
+ prev->GetCreationTime().msecsTo(thisw->GetCreationTime()) / 1000.0;
+ thisw->set_speed(dist / timed);
+ }
}
}
+
if (thisw->speed_has_value()) {
if ((!tdata.min_spd) || (thisw->speed_value() < tdata.min_spd)) {
tdata.min_spd = thisw->speed_value();
diff --git a/trackfilter.cc b/trackfilter.cc
index b1cd3119e..f63b1359c 100644
--- a/trackfilter.cc
+++ b/trackfilter.cc
@@ -618,12 +618,10 @@ void TrackFilter::trackfilter_synth()
}
if (first) {
if (opt_course) {
- // TODO: the course value 0 isn't valid, wouldn't it be better to UNSET course?
- wpt->set_course(0);
+ wpt->reset_course();
}
if (opt_speed) {
- // TODO: the speed value 0 isn't valid, wouldn't it be better to UNSET speed?
- wpt->set_speed(0);
+ wpt->reset_speed();
}
first = false;
last_course_lat = wpt->latitude;
--
2.30.2